Mysql 数据库表设计问题?
我正在创建一个以Mysql 数据库表设计问题?,mysql,sql,database,Mysql,Sql,Database,我正在创建一个以名称为列的表,这样就有多行具有相同的名称,并且与每个名称对应的还有其他值(列) 我必须设计表格,以便有两组值default和latest。因此,用户可以查询以获取默认/最新设置,并可以编辑表格,以使特定的值集成为默认值,取代先前的默认值集 我正在考虑通过保留一个标志列来实现这一点,其中: 0表示此行为默认集,1表示最新集,2表示仅为常规行 表: NAME ADDRESS CITY FLAG Hansen T
名称
为列的表,这样就有多行具有相同的名称,并且与每个名称对应的还有其他值(列)
我必须设计表格,以便有两组值default和latest。因此,用户可以查询以获取默认/最新设置,并可以编辑表格,以使特定的值集成为默认值,取代先前的默认值集
我正在考虑通过保留一个标志列来实现这一点,其中:
0表示此行为默认集,1表示最新集,2表示仅为常规行
表:
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));
alter table\u NAME添加标志号约束
检查(在(0,1,2)中标记);
除了保持标志外,还有更好的方法吗??
我做错了吗
除了保持国旗,还有更好的方法吗??我做错了吗
如果无法以任何其他方式区分“默认”数据和“最新”数据,则必须添加列或表
但我不明白为什么你会选择使用整数的方式。您用三个不同的整数表示两个不同的值。在您的方案中,没有任何东西可以阻止您存储多个默认值或最新值。您也没有正确的主键 更好的(关系更密切的)解决方案是A)向表中添加某种版本,b)使用PK(name+哪个版本是默认副本)创建另一个表,并将这两列作为主键和外键。“Latest”只是具有最高版本的行,而不是标志。这将为您提供更好的数据完整性。但是,它允许给定密钥可能没有默认值的情况
要强制执行这一点,您必须重新设计表,使其具有父记录(名称)、一些子记录(其他内容)和指向默认值的父记录上的FK。根据您的数据库是否支持延迟约束(我不知道MySQL),由于循环性质,这可能不可能实现。您的模式缺少用于存储唯一名称的表 如果您创建了一个地址表,那么您可以有一个引用它的地址表,并且假设每个“名称”只能有一个“最新”行和一个“默认”行,您可以向名称表添加列,以链接到地址的最新行和默认行 当然,如果latest表示“last added to the table”,那么为地址的创建添加时间戳意味着您可以从中推断出最新的行 除了保持国旗,还有更好的方法吗 通常,默认设置将通过标志列显示,但不显示有关最新设置的信息 为了存储最新信息,一个表将包括两个额外的时间戳列:创建的和修改的(并且您可能有两个额外的列显示谁,例如CreatedBy,ModifiedBy)
如果您有这些审核列,那么计算最新值只是查看这些时间戳的问题,具体取决于最新值是指最近创建的还是最近修改的。您不能将该标志改为空值,而不是填充默认值,然后在程序级别上获取默认值吗?或者更确切地说,您可以跳过创建行并将表外部联接,然后检查是否有行,如果没有,则选择默认行。如果用户查询DELAULT或最新行以获取特定名称,则我希望返回其查询的特定行,该行的默认值与每个用户的不同?