怎样设计表结构,控制重复的数据

longshujun 2012-10-31 08:13:24
表1有三个字段:字段A,字段B,字段C,都是nvarchar(50)类型,
如下数据合法:
字段A,字段B,字段C
1001 01 2001
1001 02 2001

如下数据不合法:
字段A,字段B,字段C
1001 01 2001
1002 02 2001

意思就是 相同内容的字段A,不同的字段B,允许有相同的字段C,
但是 不同内容的字段A,不允许有相同的字段C,

请问怎样设计表结构,才能达到目的,或者有什么其他的办法?
...全文
167 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
以学习为目的 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 7 楼 的回复:

其实如果有主键的话,那么重复的,只能说是冗余,这时要考虑的是否要拆表。


膜拜DBA啊
[/Quote]跟小F姐姐学的真像
Andy-W 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
相同内容的字段A,不同的字段B,允许有相同的字段C,
但是 不同内容的字段A,不允许有相同的字段C,
[/Quote]

可以分析出,C和A關係,是一對多關係。
在把A和C組成一個Group,再與B建立關係 CA-B,看出AC與B是多對一關係。

可以分解成2個table,
CA{col_C,col_A} 其中col_C作為Primary Key.
BCA(col_B,CA.col_C),其中col_B作為Primary Key,而CA.col_C作為foreig key ,references CA(col_C).



  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

其实如果有主键的话,那么重复的,只能说是冗余,这时要考虑的是否要拆表。
[/Quote]

膜拜DBA啊
發糞塗牆 2012-10-31
  • 打赏
  • 举报
回复
其实如果有主键的话,那么重复的,只能说是冗余,这时要考虑的是否要拆表。
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

这个可以使用触发器在插入数据的时候,判断一下,满足你的规则则插入,不满足规则则回滚。
[/Quote]

使用触发器判断
汤姆克鲁斯 2012-10-31
  • 打赏
  • 举报
回复
更新或者插入操作的时候先判断一下,写个过程去处理。
longshujun 2012-10-31
  • 打赏
  • 举报
回复
请问如果使用约束的话,具体的语句怎么写?
longshujun 2012-10-31
  • 打赏
  • 举报
回复

1、“加约束或在程序插入或更新数据时判断一下是否规则允许”这样做还是会有问题,多用户大批量同时插入数据时,还是会参数重复数据,虽然概率低

2、“这个可以使用触发器在插入数据的时候,判断一下,满足你的规则则插入,不满足规则则回滚。”使用触发器会影响速度

可不可以有表结构设计方面的方法?
  • 打赏
  • 举报
回复
这个可以使用触发器在插入数据的时候,判断一下,满足你的规则则插入,不满足规则则回滚。
zjl8008 2012-10-31
  • 打赏
  • 举报
回复
加约束或在程序插入或更新数据时判断一下是否规则允许

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧