我有一个包含列的CONTACT表:
当我的系统尝试发送消息时,它会在另一个表MSG_LOG中写入一个包含列的日志:
我的问题#1:这是一个好设计吗?这可能是一种更好的方法(下图)。
MSG_LOG
问题2:如果有一天我们需要将Contact.name从varchar(50)扩展到varchar(100),我的担心是什么。我们忘记扩展MSG_LOG.contact_id的可能性有多大?
任何指针?
答案 0 :(得分:2)
一个更重要的问题是:当某人的姓名或手机号码发生变化时会发生什么?
使用第一种设计,您可以在发送邮件时保留其姓名和手机号码的记录。
使用第二种设计,您可以回到更新的名称和编号。
(根据您需要的历史记录,您甚至可能需要第三个选项:MSG_LOG中的联系人ID,姓名和号码。)
答案 1 :(得分:2)
使用SQL别名类型 - 在SQL Server中:
CREATE TYPE name_type FROM varchar(50) not null
答案 2 :(得分:0)
Q1。答。 在MSG_LOG表中不要再使用MobileNo和Name。
如果ContactId成为FK,那么很容易就可以从两个表中获取所有内容。
所以只需用
创建MSG_LOG表MSGID PK [它sholud会自动递增] MSGTEXT sendingdate_time ContactID FK
和 如果您的消息被重复,您还应创建一个Messages表,并在MSGLOG表中使用ContactId,MessagesId作为FK,并将msg和具有较少信息的联系重用为第三标准化。总是在msg集合中保存一次新的msg并重复使用它们。如果重复msg,那么你应该这样做。同时也为前端观点节省了时间。