mysql如何讓設計資料量較少的一對多關係資料表

2021-08-07 06:17:03 字數 1346 閱讀 4511

當我們在設計資料庫的資料表時,經常會遇到一對多的資料結構,如新聞的tag等,比如我們在設計資料表的時候,就碰到了這個問題,

當時涉及樓盤資料表(house)物業性質、樓盤的裝修性質等情況的時候,因為乙個樓盤可能會涉及多個物業性質,而且物業性質的數量並不是很多。為了便於搜尋,如果把所有物業性質的id用分隔符組合成乙個字串肯定不符合要求。所以一般都是單獨使用乙個表來儲存他們的對應關係,每次修改的時候,還必須先清除所有的對應資料,然後重新插入,非常麻煩,為了保證資料的一致性,還必須用事務。很顯然,對於關聯資料種類很少的情況下,這兩種方法都不好。

在linux裡,讀寫執行許可權用421來表示,這就是乙個典型的一對多的場景,比如用7就可以表示同時擁有3種許可權,7表示讀寫許可權。

//住宅物業型別,資料儲存的是值

$dict['house']['hometype'] = array(

1 => "普通住宅",

2 => "公寓",

3 => "別墅",

4 => "寫字樓",

5 => "經濟適用房",

6 => "townhouse",

7 => "酒店式公寓",

8 => "商鋪",

9 => "商住",

10 => "建築綜合體",

11 => "兩限房",

12 => "自住型商品房"

);

如果乙個樓盤存在多個物業型別,那麼,假如乙個樓盤屬於普通住宅和別墅,則加起來數字為2^1+2^3 =10 .如果屬於普通住宅,別墅,商鋪,則為2^1+2^3+2^8=258 .

我們如果要查詢普通住宅,則可以:

select site,hid,name,hometype from `house` where `hometype` & 2 = 2

如果我們要查既屬於普通住宅,又屬於別墅,則sql語句為

select site,hid,name,hometype from `house` where `hometype` & 10 = 10

假如我們要給第3條記錄新增經濟適用房,則sql語句為

update `house` set `hometype` = `hometype` | 32 where `site` = 'bj' and hid = 3

假如我們要給第3條記錄刪除普通住宅,則sql語句為

update `house` set `hometype` = `hometype` ^ 2 where `site` = 'bj' and hid = 3

mysql 根據條件統計資料量

目錄 需求 統計總數,未完成數和完成數 方法一 方法二 總結 create table test task id int 11 not null auto increment,done tinyint 1 default null comment 是否完成 donetime int 11 defau...

SQLServer 統計資料量

做乙個專案,第一件事情就是問 這個資料庫多大?下面是統計資料庫資料量大小的方法 通常我們會使用命令 sp helpdb dbname 例如,查詢資料庫 testdb3 的使用量 sp helpdb 是最常用的命令,但是注意 該命令顯示的資料庫大小 db size 並不是指現存有效資料的大小,而是指 ...

SQL統計資料量

很多時候遇到統計資料的問題,比如統計半年,每個月,每天24小時等等。每月 假定資料庫中為varchar2,如20160331165124.474 select cyear,cmonth,cday chour,cmin,count 1 from select from select to date s...