我有一个包含两个表的数据库; List和ListItem。这些表具有一对多的关系。但要求是允许对与给定List相关的ListItem进行排序。除了在ListItem表中有一个“排序顺序”字段,对此有什么好处?
答案 0 :(得分:2)
我看到三种选择:
列表项表中的排序顺序字段。通常最好的选择:简单,做你需要的。如果它是您想要的,可以自动填充时间戳。
包含排序信息的单独表格。如果要保留任意数量的订单,则非常有用
下一个/上一栏:在大多数情况下,这是一场噩梦,但如果您有大量的列表项并且需要在中间插入很多,那么它实际上可能很有用。
答案 1 :(得分:1)
如果您的表的特定于域的含义与“列表”和“列表项”一样通用,那么您可以做的最好的事情就是提供通用的“排序顺序”列。
但是,如果您的表在业务域中具有更具体的含义,您将希望排序顺序列在该域中具有更多含义。一个例子是Orders和LineItem表,其中sort列是LineItemNumber:
CREATE TABLE [Orders](
[ID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY
)
GO
CREATE TABLE [LineItems](
[ID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[OrderID] [int] NOT NULL,
[LineItemNumber] [int] NOT NULL,
CONSTRAINT [UC_LineItems] UNIQUE NONCLUSTERED
(
[OrderID] ASC,
[LineItemNumber] ASC
)
)
GO
ALTER TABLE [LineItems] WITH CHECK ADD CONSTRAINT [FK_LineItems_Orders]
FOREIGN KEY([OrderID])
REFERENCES [Orders] ([ID])
GO
ALTER TABLE [LineItems] CHECK CONSTRAINT [FK_LineItems_Orders]
GO
请注意,我添加了特定于域的约束,即给定订单不能包含两个具有相同LineItemNumber的订单项。在List / ListItem的evey情况下,该约束不是必需的。
答案 2 :(得分:0)
如果要求您提供排序或序列字段以外的方法,那么CreatedAt字段如何?有时,单独的排序顺序表(ListItemSortOrder)很有用。