我正在创建一个以name
为列的表,以便有多个行具有相同的名称,并且对应于每个名称,还有其他值(列)。
我必须设计表格,以便有两组值默认和最新。因此,用户可以查询获取默认/最新设置,并可以编辑表以使特定的值集合作为默认值替换先前的defult集。
我正在考虑通过将标志列保留在以下位置来实现此目的: 0表示此行是默认设置,1表示最新设置,2表示只是一般行。
TABLE:
NAME ADDRESS CITY FLAG
Hansen Timoteivn 10 Sandnes 1 (LATEST)
Hansen street 13 texas 0 (DEFAULT)
Svendson Borgvn 23 Sandnes 1 (LATEST)
Svendson street 14 colaba 2 (GENERAL)
Svendson street 15 Houston 0 (DEFAULT)
Pettersen Storgt 20 Stavanger 0 (DEFAULT)
Pettersen Storgt 21 texas 1 (LATEST)
我正在考虑像这样实现它:
alter table TABLE_NAME add flag number CONSTRAINT <constraintname>
CHECK (flag IN (0, 1, 2));
除了保持标志之外,还有更好的方法吗? 我做错了吗?
答案 0 :(得分:1)
除了保持旗帜之外,还有更好的方法吗?
通常,默认设置将由标志列显示,但不会显示有关最新信息的信息。
要存储最新信息,表格中会包含2个额外的时间戳列:已创建和已修改(您可能还有两个列,其中显示了CreatedBy,ModifiedBy等人员。)< / p>
如果你有这些审核专栏,那么找出最新的只是查看这些时间戳的问题,具体取决于最近创建或最近修改的最新方式。
答案 1 :(得分:0)
除了保持旗帜之外,还有更好的方法吗?我做错了吗?
如果您无法以任何其他方式区分“默认”数据和“最新”数据,则必须添加列或添加表格。
但我不明白你为什么选择使用整数的方式。您使用三个不同的整数表示两个不同的值。
答案 2 :(得分:0)
根据您的建议,没有什么可以阻止您存储多个默认值或最新版本。您也没有合适的主键。
更好(更关系)的解决方案是:a)在你的表中添加某种版本,b)用PK(名称+版本是默认副本)创建另一个表,将这两列作为主要和&amp;外键。 “最新”只是具有最高版本的行,而不是标志。这将为您提供更好的数据完整性。但是,它将允许给定密钥可能没有默认值的情况。
强制您必须重新设计您的表以获得父记录(名称),一些子记录(其他内容)以及父母指向默认值的FK。根据您的数据库是否支持延迟约束(我不知道MySQL),由于循环性质,这可能无法实现。
答案 3 :(得分:0)
您的架构缺少用于存储唯一名称的表。
如果您创建一个,那么您可以拥有一个引用它的地址表,并且假设每个“name”只能有一个“最新”和一个“默认”行,您可以在名称表中添加列以进行链接到最新和默认的地址行。
当然,如果最新的意思是“最后添加到表中”,则添加时间戳来创建地址意味着您可以从中推断出最新的行。