Mysql 数据库表设计问题?

Mysql 数据库表设计问题?,mysql,sql,database,Mysql,Sql,Database,我正在创建一个以名称为列的表,这样就有多行具有相同的名称,并且与每个名称对应的还有其他值(列) 我必须设计表格,以便有两组值default和latest。因此,用户可以查询以获取默认/最新设置,并可以编辑表格,以使特定的值集成为默认值,取代先前的默认值集 我正在考虑通过保留一个标志列来实现这一点,其中: 0表示此行为默认集,1表示最新集,2表示仅为常规行 表: NAME ADDRESS CITY FLAG Hansen T

我正在创建一个以
名称
为列的表,这样就有多行具有相同的名称,并且与每个名称对应的还有其他值(列)

我必须设计表格,以便有两组值defaultlatest。因此,用户可以查询以获取默认/最新设置,并可以编辑表格,以使特定的值集成为默认值,取代先前的默认值集

我正在考虑通过保留一个标志列来实现这一点,其中: 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或最新行以获取特定名称,则我希望返回其查询的特定行,该行的默认值与每个用户的不同?