【发布时间】:2022-01-02 21:37:05
【问题描述】:
我一直在尝试在 Microsoft SQL Server Management Studio 中创建数据库,并且在使用相同的复合键时尝试获得一个固定值。
为了更清楚:
| CrewID | Phone | Email |
+--------+-------+---------------+
| 565 | 210 | a@hotmail.com |
| 565 | 212 | a@hotmail.com |
| 565 | 213 | a@hotmail.com |
| 935 | 641 | b@hotmail.com |
| 935 | 646 | b@hotmail.com |
基本上CrewID、Phone 是复合键,允许同一个CrewID 使用多个电话号码,但我希望为每个唯一 ID 锁定电子邮件。
因此,每当我输入新数据时,如果 ID 相同,则使用具有该特定 ID 的第一个条目的电子邮件自动填充电子邮件。
【问题讨论】:
-
请阅读this,了解一些改进问题的技巧。你试过什么?有什么研究吗?也许是
trigger来验证insert和update上的数据?您有问题还是只是寻求授权?由于表中的行没有顺序,“第一个条目”是什么意思? -
"但我希望为每个唯一 ID 锁定电子邮件" 哪个唯一 ID?全体人员?电话?两个都?这实际上是一个糟糕的数据库设计,如果您试图阻止多个不同的电子邮件地址,您应该将它们存储在不同的表中(Crew?),而不是建立一种机制来尝试保持它们相同。
-
@DaleK 数据库的重点不在邮件上。坦率地说,这整个想法是可选的,我只是想实现它以最终使数据输入更容易。但尽我所能回答你的问题。我希望相同的 CrewID 使用相同的电子邮件,如上表所示。所以正如HABO所提到的,如果它检测到crewID没有改变,我可能会尝试制作一个自动填充电子邮件列的触发器。我不确定这是否可行。如果没有任何效果,我会按照你说的那样分表。
-
好像你需要 3 张桌子。一个
Crew表、一个Phone表和一个“连接”表,用于两个先前表之间的多对多连接。然后你的Email列进入它实际相关的表中,并且上面有一个UNIQUE INDEX/CONSTRAINT。 -
无论今天的功能多么可选,人们都应该始终正确地设计数据库,否则会为明天带来技术债务。如果您仍然希望按照您说的做,您应该在您的客户端界面中自动填充它,并禁用对添加到同一 CrewID 的任何进一步记录的编辑。
标签: sql sql-server tsql sql-update