我想知道以下情况下最好的数据库设计。
我使用Spring和Sql Server,我的情况可以简化如下:
假设这里有三张桌子:
项目:
地址:
顺序:
业务逻辑是Spring处理包括项目、地址和订单信息在内的传入消息。
如果传入项数据存在于数据库中(exist表示名称和类别相同),则返回该记录的id。它不存在,插入新记录并返回新id。
地址差不多。如果传入的地址数据存在于数据库中(exist表示地址和邮政编码是相同的),则返回该记录的id。它不存在,插入新记录并返回新id。
然后插入带有前面项id的order表,并将address id作为外键。
我现在所做的就是将所有这些选择和插入逻辑放在一个存储过程中,以减少服务器和数据库之间通信的延迟。
我想知道这个案子有没有更好的解决办法。
更新:
下面是我使用的Proc:
CREATE procedere spInsert
--list of parameters
set @tmpItemId = (select id from item where name=@name and category=@category)
if @tmpItemId is NULL
begin
insert to item values(@name,@category)
set @tmpItemId=@@IDENTITY
end
--the same logic applied to Address
insert into order values(@price,@date,@tmpItemId,@tmpAddressId)经过一段时间的测试,速度不令人满意,插入100条记录大约需要10-20秒。
我可以问一下改进的方法吗?
顺便说一句,我认为存储过程的瓶颈在于每次选择id并频繁插入。如何使用uuid作为表的索引,而不是在数据库中自动增加索引?这样,Java端就可以处理选择部分,因为Java端提供了uuid,而sql server只关心insert。
这是个不错的选择吗?
发布于 2014-03-22 14:22:23
在选择设计时有几个因素要考虑。下面是几个开始的例子:
https://stackoverflow.com/questions/22292765
复制相似问题