是不是从其它表的某个字段取值,一定要建FK?

gongxicn 2003-11-10 09:15:22
是不是从其它表的某个字段取值,一定要建FK?
FK的建立有什么条件,要注意什么
...全文
51 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengdali 2003-11-10
  • 打赏
  • 举报
回复
它会自己约束的。
pengdali 2003-11-10
  • 打赏
  • 举报
回复
举例:

Create database cat
go
use cat
go
CREATE TABLE s(s# int not null primary key,s_name varchar(8) not null)
go
CREATE TABLE c (c# int not null primary key,c_name varchar(8) not null)
go
CREATE TABLE cs(c# int not null,s# int not null,cj tinyint not null default(0),
primary key (c#,s#),foreign key(s#) references s(s#),foreign key(c#) references c(c#))
go


insert s values(1,'saa')
insert c values(1,'caa')

--这句是对的
insert cs values(1,1,86)

--这句是错的,sql会报错,应为s表的s#列里没有2
insert cs vlaues(2,1,45)
SQLServer数据库设计规范 作者:佚名 厚朴教育来源:网络 点击数:1446 更新时间:2008-12-2 1 相关的设计规范: 1.1 采用有意义的字段名 尽可能地把字段描述的清楚些。当然,也别做过头了,比如CustomerShippingAddressStreetLine1 虽然很富有说明性,但没人愿意键入这么长的名字,具体尺度就在你的把握中。每个单词的首个字母要求用大写!!!不要用下划线来连接每个单词. 1.2 遵守3NF 标准3NF 规定: A.内的每一个值都只能被达一次。 B.内的每一行都应该被唯一的标识(有唯一键)。 C.内不应该存储依赖于其他键的非键信息。 1.3 小心保留词 要保证你的字段名没有和保留词、数据库系统或者常用访问方法冲突,比如,写的一个ODBC 连接程序里有个,其中就用了DESC 作为说明字段名。后果可想而知!DESC 是DESCENDING 缩写后的保留词。里的一个SELECT *语句倒是能用,但我得到的却是一大堆毫无用处的信息。 1.4 保持字段名和类型的一致性 在命名字段并为其指定数据类型的时候一定要保证一致性。假如字段在某个中叫做"AgreeMentNumber",你就别在另一个里把名字改成"ref1"。假如数据类型在一个里是整数,那在另一个里可就别变成字符型了。记住,你干完自己的活了,其他人还要用你的数据库呢。 2 命名规则: 2.1 数据库(Database)的定义 数据库名称 = 数据库内容标识(首字大写) 2.2 (Table)的定义 命名应尽量反映存储的数据内容。 名前缀:以该及与该相关联的一系列的内容而得到一个代统一的标识 名称 = 名前缀 + 内容标识(首字大写) 如ClientInfo相关联的一系的以ci作为前缀, 即有名:ciHistory,ciContact,ciBusiness 2.25 字段(Field)的定义 字段是数据库中的用途最广泛的,它的类型非常多,所以必须加类型前缀来标示它的类型。 字段名称 = 字段类型前缀 + 字段内容标识(首字大写) 2.2视图名 视图的名称 = "vw" + 视图内容标识(首字大写) 如 vUserPerm 2.3触发器名 触发类型触发标识 ----------------------------------- Insert i Delete d Update u 触发名= "tr" + 触发标识 + 相应的名 如:triClient,trdClient。 2.4存储过程名 存储过程功能存储过程功能前缀 ---------------------------------------- 添加a 更新u 删除d 查询或其它o 存储过程名称 = 存储过程功能前缀 + 存储过程内容标识(首字大写) 如 spoChkUserPerm 2.5变量名 每个单词的首个字母为大写,如@EmployeeName。 2.6命名中其他注意事项 禁止使用中文命名!!!!! 命名都不得超过30个字符的系统限制,变量名的长度限制为29(不包括标识字符@)。 命名都采用英文字符,每个单词的首个字母要大写 2.7 SQL语句的编写规范 数据库中存储过程和触发器中涉及大量的SQL语句,对SQL语句的编写规范如下: 关键字大写:在SQL语句的编写中,凡是SQL语句的关键字一律大写,如:SELECT、ORDER BY、 GROUP BY、 FROM、WHERE、 UPDATE、 INSERT INTO、 SET、 BEGIN、 END ...... 2.8 Rule ru+Rule标识 2.9 主键 pk+名+主键标识 2.10 外键 fk+名+主名+外键标识 2.11 索引 idx+字段标识 2.12 Default df+Default标识 3 编程结构和描述 SQL SERVER系统中,一个批处理是从客户传给服务器的一个完整的包,可以包含若干条SQL语句。批处理中的语句是作为一组去进行语法分析、编译和执行的。触发器、存储过程等数据对象则是将批处理永久化的方法。 3.1注释 注释可以包含在批处理中。在触发器、存储过程中包含描述性注释将大大增加文本的可读性和可维护性。本规范建议: 1、注释以英文为主。 实际应用中,发现以中文注释的SQL语句版本在英文环境中不可用。为避免后续版本执行过程中发生某些异常错误,建议使用英文注释。 2、注释尽可能详细、全面。 创建每一数据对象前,应具体描述该对象的功能和用途。 传入参数的含义应该有所说明。如果取值范围确定,也应该一并说明。取值有特定含义的变量(如boolean类型变量),应给出每个值的含义。 3、注释语法包含两种情况:单行注释、多行注释 单行注释:注释前有两个连字符(--)
1.1. 建准则
建立数据库必须通过DBA完成:
l 每张必须有一个主键。
l 由设计人员提供建的语句。
l 由设计人员提供名及字段的中文注释。
l 由DBA与设计人员加入物理存储参数。
l 由DBA确定数据空间及索引空间的分配。
l 如果一个字段引用其它字段,必须加入外键约束。
l DBA必须清楚每一个字段的含意。
是否有外键
是否可以为空null
1.2. 注意事项
l 索引
每一张必须有一个主键 <名>_pk
若干外键索引 <名>_fk_<数字>
若干其它索引 <名>_<数字>
l 数据类型
定义合适的数据类型,注意 例如:
amount number(9,2)示一供可以存放9个数字,其中小数点后有2位。
2. 数据库的命名
l 名的长度最多20个字符(需然oracle允许最大30个字符)。
l 名只能用字母数字及下划线。
l 名的命名规则
TAB_ 业务,一般会记录业务发生的信息。
TABF_ 值,只有两个字段, 此类不经常变化。用于应用程序的变量取值
TMP_ 临时
日志
日志以_log结尾,一般志可以有一段时间之后,进程备份,删除其中一些时间较长的数据。
周期备份
6. TABY_字符串_YYMM:每年清空的周期。YY建立年份,MM清除的月份。
7. TABM_字符串_MMDD:每月清空的周期。MM建立月份,DD清除的日期。
8. TABW_字符串_MMWD:每周清空的周期。MM建立月份,清除的周(1-4)及天(1-7)。
9. TABD_字符串_DDHH:每天清空的周期。DD建立日期,清除的时间(01-24)。
12. 字符串_BAK:数据备份(应用程序不得使用

34,875

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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