多型關聯:
當乙個表中的某列可能要引用多個表,這時候需要增加額外的一列來確定引用來之那個表,一般為entity_type列。
可以使用反sql模式中的幾種方式來避免這個多餘的列,但是會帶來額外的開銷。
解決方法一:
,但是交叉表一般是多對多關係才出現的,在這裡一條品論一般只能對應一條bugs或者是一條requires,這是我們應該在交叉表中為comment_id列建立唯一索引
解決方案二:
使用超級父表,下面是簡單的**:
/**多型關聯資料庫例項反模式,使用超級表*/
/*超級表*/
create table issuse (
issuse_id int unsigned not null primary key
);/*可以看成這兩個表繼承了issuse表*/
create table bugs(
issuse_id int unsigned not null primary key,
bugs_name varchar(20),/*這裡省略跟多列*/
foreign key(issuse_id) references issuse(issuse_id)
);create table requires(
issuse_id int unsigned not null primary key,
require_name varchar(20),/*省略多列*/
foreign key(issuse_id) references issuse(issuse_id)
);create table tcomments(
comment_id int unsigned not null primary key,
comment_con varchar(20), /*省略多列*/
foreign key(issuse_id) references issuse(issuse_id)
);select * from bugs b
inner join tcomments tc on tc.issuse_id = b.issuse_id
where b.issuse_id = 1;
/**這裡可以設定乙個變數來終止查詢,如果在bugs中查詢到了記錄那麼就不在查詢requires了*/
select * from tcomments tc
left join bugs b on b.issuse_id = tc.issuse_id
left join requires rs on rs.issuse_id = tc.issuse_id
where tc.comment_id = 1;
/*通過程式來判斷哪些字段是否設定了,或者是做其他的優化*/
借鑑之sql反模式一書
規則 適當使用資料庫
內容 當需要acid屬性來儲存資料之間的關係和一致性時,可以使用關係型資料庫。其他資料的儲存需要考慮更適合的工具,如nosql dbms。場景 當在系統結架構中引入新資料或資料結構時。用法 考慮資料量 儲存量 響應時間長短 關係和其他因素來選擇適當的儲存工具。也要考慮資料結構及產品需要對資料進行的管...
hibernte關聯關係時刪除資料庫的資料
例如 user scart 在這之中user與list有關聯關係,並且通過user來刪除list中的物件。我們用list scarts user.getscart 來獲取到scarts集合。然後用 scarts.remove 方法來刪除,remove我們可以通過兩種方式來刪除一是 通過物件scart...
關係型資料庫關聯更新資料彙總
先給出需求,有2張表,學生表和分數表,兩種表都有乙個分數列,但是這兩列的值不一致,現在需要更新學生表,讓學生表中的值等於分數表中的值。初始化指令碼如下 create table student id varchar 100 primary key,name varchar 50 addr varch...