将这些数据合并到一个表中?

时间:2012-10-12 23:39:57

标签: sql sql-server nhibernate

我想知道我是否可以摆脱桌子。

现在我有任务和约会。这两个表都有不同的列并存储不同的信息,因此我不能也不会将这些表组合在一起。

但是,对于每项任务和约会,您可以设置多个提醒(通过短信,电子邮件和两者发送)。

现在我有2个单独的提醒表。它们都有与FK相同的列。

enter image description here

那么可以为两者使用相同的表吗?

我看到发生这种情况的唯一方法是我在表中总是有两个FK但是一个总是为空(这似乎是错误的)。

enter image description here

2 个答案:

答案 0 :(得分:1)

你可以这样做

Reminder
  - ID
  - ReminderDate
  - EntityID     -- Could be TaskID or AppointmentID
  - EntityType   -- TASK or APPOINTMENT

插入

INSERT INTO Reminder(@ReminderID, @TaskID, 'TASK') 
INSERT INTO Reminder(@ReminderID, @AppointmentID, 'APPOINTMENT')

选择

SELECT * FROM Reminder WHERE EntityID=@TaskID AND EntityType='TASK' -- Reminders for Task

SELECT * FROM Reminder WHERE EntityID=@AppointmentID AND EntityType='Appointment' -- Reminders for Appointment

答案 1 :(得分:0)

“我看到发生这种情况的唯一方法是我在表格中总是有两个FK但是一个总是为空(这似乎是错误的)。”

我认为没有任何问题。这是你的商业规则。您可以使用检查约束在数据库级别强制执行它(2个外键+检查约束,始终一个字段必须不为null,另一个字段为null)。

无论如何,保留此解决方案并使用正确的外键比使用EntityID,EntityType技巧IMO更好IMO。

使用数据库功能来强制数据完整性。否则,获得不良数据的可能性会增加。您可以在代码中强制执行某些规则,但是出现错误或强制执行业务规则的可能性远远高于使用外键约束等数据库功能。