工程上為什麼建表時不設定外來鍵?
問題
一直有個疑惑,在大型工程上表之間的外來鍵關係只在ER圖上體現,卻沒有在建表的時候設定外來鍵(如往資料庫新建表時對外來鍵沒有限制),問了架構師和查閱相關資料後整理了一下。
總結
-
在大型系統中(效能要求不高,安全要求高),最好使用外來鍵(外來鍵可以增強資料庫資料的完整性和一致性)
-
在大型系統中(效能要求高,安全自己控制),不用外來鍵(有外來鍵約束的話,插入欄位會進行檢查,影響效率)
-
小系統,最好用外來鍵
-
用外來鍵要適當,不能過分追求
-
不用外來鍵而用程式控制資料一致性和完整性時,應該寫一層來保證,然後具體應用通過這個層來訪問資料庫(比如外來鍵約束都轉交給dao層)
相關推薦
工程上為什麼建表時不設定外來鍵?
問題 一直有個疑惑,在大型工程上表之間的外來鍵關係只在ER圖上體現,卻沒有在建表的時候設定外來鍵(如往資料庫新建表時對外來鍵沒有限制),問了架構師和查閱相關資料後整理了一下。 總結 在大型系
Hibernate4註解開發,使用hbm2ddl生成表時,不生成外來鍵的解決方法
方案一: 在使用<property name="hbm2ddl.auto">update</property>的情況下, @ManyToOne @JoinColumn( name = "p_id", foreignKey = @For
HQL語句多表聯合查詢,Mysql不設定外來鍵關係
如有表A,表B,表C A表包含B表的key,A表包含C表的key。如果我們想用HQL語句查詢A表時帶出A表所有屬性和B表的所有屬性和C表的所有屬性,HQL語句可按一下方法寫。 @NamedQuery(name="getOrderByUserid",query="From A
【Hibernate】建立表時不能生成外來鍵
問題 alter table t_student drop constraint FK4B907570A5F18255 drop table t_classes if exists drop table t_student if exists create tab
(轉)mysql創建表時反引號的作用
navi _id sta gbk ble 擴展 engine bsp div 試用navicat工具查看現網mysql建表語句時,發現表名和字段名都是反引號引起來的 CREATE TABLE `tab_notice_title_tv` ( `i_id` int(11
powerDesigner建表時選擇不同數據庫類型
log des 創建表 img sql 數據 ges ima 不同數據庫 l 使用powerDesigner創建表模型的時候可選擇數據庫類型 如圖設置為mysql: powerDesigner建表時選擇不同數據庫類型
MySQL 創建表時,設置時間字段自己主動插入當前時間
mil post div ipp strong ren current spa blog MySQL 創建表時,設置時間字段自己主動插入當前時間 DROP TABLE IF EXISTS `CONTENT`; CREATE TABLE `CONTENT`
創建表時 ORA-00955: 名稱已由現有對象使用
system ima color from http bsp 改名 賬戶 重名 如下,在執行創建表語句時報錯如下: 執行下面sql查詢 select a.OBJECT_type,a.* from all_objects a where upper(a.OBJEC
mysql修改表結構 MySQL修改表結構操作命令總結 MySql資料庫在表中新增新欄位,設定主鍵,設定外來鍵,欄位移動位置,以及修改資料庫後如何進行部署和維護的總結 mysql 如何修改、新增、刪除表主鍵
MySQL修改表結構操作命令總結 以下內容轉自:http://www.jb51.net/article/58079.htm 表的結構如下: 複製程式碼程式碼如下:
Flask-SQLAlchemy - 不使用外來鍵連表查詢。記得常回來看我
前言 相比於 Django 的 ORM ,SQLAlchemy "不依靠外來鍵進行跨表聯查" 的解決方案就比較多。 沒啥好說的,只能怪自己學藝不精.. _(:з」∠)_&n
Oracle資料庫建表前,先判斷是否表存在,存在不建表,不存在則建表
------建立TABNAME ---------- DECLARE TOTAL INT := 0; BEGIN SELECT COUNT(1) INTO TOTAL FROM USER_TABLES A
postgresql 表不設定主鍵問題
由於多系統整合,需要將當前系統的資料庫表格修改為檢視的形式對映其他系統的表格。在做這項工作時需要匯入資料和修改資料在這個過程中我發現了一個大坑,其他系統表格居然都沒有主鍵。 (postgresql 使用pgadmin不能修改無主鍵的表資料,navicat 在批量複製資料時,也
MySQL 建表時的四種key
key 是資料庫的物理結構,它包含兩層意義,一是約束(偏重於約束和規範資料庫的結構完整性),二是索引(輔助查詢用的)。包括primary key, unique key, foreign key,ke
MySql資料庫在表中新增新欄位,設定主鍵,設定外來鍵,欄位移動位置,以及修改資料庫後如何進行部署和維護的總結
1,為當前已有的表新增新的欄位 alter table student add studentName varchar(20) not null; 2,為當前已有的表中的欄位設定為主鍵自增 alter table student add constraint PK_studentId primaryKe
mysql中建立約束語法,建表時,建表後
主鍵、外來鍵和索引的區別 定義: 主鍵--唯一標識一條記錄,不能有重複的,不允許為空 外來鍵--表的外來鍵是另一表的主鍵, 外來鍵可以有重複的, 可以是空值 索引--該欄位沒有重複值,但可以有一個空值 作用: 主鍵--用來保證資料完整性 外來鍵--用來和
MySql和Oracle的建表即約束設定不同[日期型別的預設值設定方式不同]
Oracle中 給日期時間設定預設值的方式: CREATE TABLE "PHR"."T_UM_USERDETAIL" ( "PID" NVARCHAR2(128) NOT NULL , "USERID" NVARCHAR2(128) NULL , "PHOTOID" N
MySQL建表時的四種Key
MySQL中有四種Key: Primary Key, Unique Key, Key 和 Foreign Key。 除了Foreign Key最好理解外,其他的都要區分一下。 剩下的三種都要在原表上建立索引。 Primary Key和Unique Key之間的區別晚上說的最多。Primary Key的提出
mysql 設定外來鍵時注意的小細節
設定外來鍵的命令格式為: alter table <表名1> add constraint <約束名> foreign key (需要設定外來鍵的列) references <表名2> (與外來鍵關聯的列); 如有兩張表
mysql如何檢視建表時的註釋
CREATE TABLE `student` ( `id` int(11) AUTO_INCREMENT PRIMARY KEY COMMENT '學好', `name` varchar(32) NOT NULL DEFAULT '' COMMENT '姓名', `sex` tinyint(1) N
Oracle建表時表名小寫且加雙引號的注意事項
SQL> CREATE TABLE "test" ("ID" int, "name" NVARCHAR2(2000)); 表已建立。 SQL> drop table test; drop