一文掌握結構化資料庫建表的思維與SQL技巧

2020-12-25 老羅觀社會萬象

【0】引言

當下流行的主流關係型資料庫不外乎Oracle、SQL Server、MySQL等,但對它們的數據表操作都離不開SQL語句。

本文就以MySQL為例來呈現下SQL對建表的操作,希望都看到條友有點助益則不甚榮幸。

先看下面一張數據表:

我們看到在這樣一張表應該問的問題有:

這樣的二維表是否可以寫入關係型資料庫?關係型庫的表結構要如何設計?表的每個欄位類型該如何定義?如果後續要增加列,表要做如何調整?哪個列是主鍵呢?【1】如何設計表?

據我個人的經驗與能力所理解,現實中的任何二維表格都是可以轉化為關係型資料庫表的。上面這個表格,單從數據層面講,當然是可以在資料庫中建一個表即可;但如果從也業務層面來講,這需要拆分為三個表:學生表、課程表、成績表。

學生表:姓名、學號、年級、性別、年齡、住址、聯繫電話等;課程表:課程名、課程號;成績表:學號、課程號、學期、考試類型、成績畫出E-R模型

【2】寫SQL建表語句

首先當然是要分析:

每個欄位該定義何種類型?哪些欄位值的是主鍵?哪些欄位的值需約定範圍?哪些欄位值是唯一的?此處我就通過SQL語句來直接反映分析的結果。

-- 學生表drop table if EXISTS student_info;CREATE TABLE student_info(sname VARCHAR(12) not null, sno VARCHAR(8) PRIMARY KEY UNIQUE not null, grade VARCHAR(8) not null, sex VARCHAR(2) not null, age int not null, address VARCHAR(128), phone NUMERIC(11) ) COMMENT = '學生表' ;-- 課程表drop table if EXISTS course_info;CREATE TABLE course_info( cname VARCHAR(12) UNIQUE not null, cno VARCHAR(8) PRIMARY KEY not null) COMMENT = '課程表' ;-- 成績表drop table if EXISTS score_info;CREATE TABLE score_info( sno VARCHAR(8) PRIMARY KEY not null, cno VARCHAR(8) not null, exam_type VARCHAR(10) not null, score NUMERIC(8,2) not null) COMMENT = '成績表' ;

【3】構建表關聯

通過上面的E-R圖的關係來構建表的關聯。

-- 與學生表關聯 ALTER TABLE score_info ADD FOREIGN KEY student_info_fk_1(sno) REFERENCES student_info(sno); --與課程表關聯 ALTER TABLE score_info ADD FOREIGN KEY student_info_fk_2(cno) REFERENCES course_info(cno);

【4】增加與刪除列

ALTER TABLE score_info add column modify_date TIMESTAMP; -- 增加列 ALTER TABLE student_info drop column phone; -- 刪除列

總結

資料庫的設計思維必須是以業務為導向的,畢竟任何技術都是為了解決現實問才有其意義的;做設計前必須把思路理清楚;熟練掌握SQL語句寫法。

相關焦點

  • 資料庫常用的sql語句匯總(2)
    資料庫相關查所有資料庫 show databases;創建資料庫 create database db1;查看資料庫show create database db1;創建資料庫指定字符集 create database db1 character set utf8/gbk刪除資料庫 drop database db1;使用資料庫 use db1;
  • sql替換資料庫欄位中的字符
    某些時候我們要修改資料庫欄位中的部分字符串,如果內容少時一個一個替換,內容多時,就不能一個一個的替換了,因為這樣不僅耗時還容易出錯。下面就用sql批量進行替換。替換shopping_hw表中欄位hw_pic,內容「*common」替換為「+play」.
  • MySQL怎麼刪除#sql開頭的臨時表
    原因如果MySQL在一個 ALTER TABLE操作(ALGORITHM=INPLACE)的中間退出,那麼可能會留下一個佔用系統空間的臨時表。例如,在對一張表(大表)添加索引時中途中斷、磁碟不足導致異常或正在添加索引時實例被kill等等情況所致。
  • 【資料庫】MySQL常見SQL語句
    databasename - 資料庫名,tablename-表名,如果要授予該用戶對所有資料庫和表的相應操作權限則可用表示, 如.(對所有資料庫所有表相應權限),datebasename.(對指定資料庫所有表相應權限)。
  • 同和君帶你玩轉資料庫!詳解SQL Server基礎操作……(附個人黑歷史+...
    有關SQL(結構化查詢語言)與其對應的各類資料庫管理系統(SQL Server、Access等)的功能與運用範圍,在這裡就不做贅述了,有興趣的可以去搜一下,然後你就會發現一個新的世界了~首先下載安裝SQL Server並配置其實例,這方面也不詳細說明了,有點電腦基礎的都會~然後就是正式的實操環節,首先連接到伺服器:
  • SQL基礎操作
    SQL(Structured Query Language,結構化查詢語言)是一種特定的程式語言,用於管理資料庫系統,操作數據甚至編寫一些程序。當然,一方面因為時間問題,一方面因為各大資料庫的區別(當然了,還有就是個人對SQL研究並不是那麼深)所以這一篇就從SQL的基本操作入手,帶領大家一起看看SQL的世界。
  • SQL Server應用程式的高級Sql注入
    [概 要] 這篇文章討論常用的"sql注入"技術的細節,應用於流行的Ms IIS/ASP/SQL-Server平臺。這裡探討有關這種攻擊各種可以注入程序訪問數據和資料庫防範的方法。這篇文章面向兩種讀者:一是基於資料庫web程序開發人員和審核各種web程序的安全專家。 [介 紹] 結構化查詢語言(SQL)是一種用來和資料庫交互的文本語言SQL語言多種多樣,大多的方言版本都共同寬鬆地遵循SQL-92標準(最新的ANSI標準[譯者註:目前最新的是SQL-99])。
  • 那些牛人的結構化思維是如何煉成的?
    其實,結構化思維不僅價值度高、而且可培養度也很高,值得我們刻意訓練。如果你按照本文的方法,沒能提高,放馬來找我。一、結構化思維比你想像得重要一萬倍下圖有15個數字,我需要你在3秒鐘內看完並記住它們,試試?
  • 慢SQL,壓垮團隊的最後一根稻草No.92
    但是新需求來或者需求變更的時候,我經常要重新寫SQL,如果變動不多我可能要改動到原來的 SQL,但是我又不敢改,所以只好 copy 重新寫一個,改 SQL 的風險好大,一報錯又要重啟好難受。Java一次要寫N個類,有點煩。
  • 最詳細的SQL注入相關的命令整理
    利用這項功能,我們可以先建一張臨時表,然後在表中一行一行地輸入一個ASP木馬,然後用BCP命令導出形成ASP文件。sqlstr=select * from rdweb.dbo.syscolumns (where id=1234)列出rdweb庫中所有表中的欄位名稱?
  • 結構化數據,最熟悉的陌生人
    因此,在處理此類任務時,深度學習以其出色的特徵提取能力一騎絕塵,於是所有人都開始想著把神經網絡用在結構化數據上——建個全連接層,把每一列的內容作為輸入,再有一個確定好的標籤,就可以進行訓練和推理了。然而,在現實中,人們更傾向於使用樹來處理結構化數據。
  • 嵌入式開發和資料庫技術 - CSDN
    1.創表 需要注意的是,實際上SQLite是無類型的    就算聲明為integer類型,還是能存儲字符串文本(主鍵除外)    建表時聲明啥類型或者不聲明類型都可以,也就意味著創表語句可以這麼寫:    create table t_student(name, age);
  • sql入門基礎知識(經典)
    * information_schema,視圖,虛擬表* test,空資料庫* 使用資料庫:mysql > use 資料庫名稱;* 對資料庫操作之前必須使用* 查詢當前資料庫中具有的表:mysql
  • sqltoy-orm 4.13.8 發版 - OSCHINA - 中文開源技術交流社區
    ,目前以sql id為籤名,便於運維通過資料庫來跟蹤sql的歸屬以mysql為例: 在sql開始部位增加了id,便於運維通過資料庫日誌快速定位問題sql的歸屬```sql/* id=qstart_order_search */  select  ORDER_ID,      DEVICE_TYPE from xxx```感謝網名cmd的用戶反饋此意見
  • 快速掌握MySQL資料庫中SELECT語句
    本文針對MySQL資料庫中的SELECT語句快速精細掌握。通配符如下表所示:以下是引用片段:符號       意義 %          0或多個字符的字符串 _           任何一單個字符 not:     否定任何邏輯表達式,或是關鍵詞,             如like,null,between等。
  • 淺談防SQL注入
    SQL注入一說,起源於1998年國外安全研究人員(rain forest puppy)在一本由黑客創辦的一本雜誌phrack上發表,題目為《NT web Technology vulnerabilities(NT web技術漏洞)》。至此,很多研究人員開始研究就細化SQL注入進行攻擊的技術。
  • 深度思考需要升級結構化思維!
    在許多講解問題分析、表達陳述、內容寫作的書裡,金字塔原理是最常見的技巧。作為結構化思維的一種,相比線性思維,更能全面、立體地展現思考的深度和廣度,有利於推出更有價值的觀點。自己已經習慣在工作中用金字塔梳理知識點,做營銷策劃案。
  • 萬物一理,結構化戰略思維給你答案
    哪怕你是個「門外漢」,只要學會了結構化戰略思維,就能夠快速把握住方向,抽絲剝繭,找到解決問題的良方。終身學習者周國元,根據自己在麥肯錫工作的諸多經驗,全方位地從思考、交流到實施這一全流程角度入手,詳盡介紹了結構化戰略思維的方法論與實操方式,寫就了這本《麥肯錫結構化戰略思維》。
  • 初級開發者經常忽視的問題——SQL注入攻擊
    如果不知道用戶名,也沒有關係,在網頁表單中將PASSWORD輸入為' or '1'='1,USERNAME隨便輸入,則上述SQL語句將變成""select id from users where username = 'XXXX' and password = '' or '1'='1'",因為'1'='1'永遠成立,所以這條語句會返回users表中所有用戶
  • 美團開源 SQL 優化工具 SQLAdvisor,與內部版本保持一致
    它基於 MySQL 原生詞法解析,再結合 SQL 中的 where 條件以及欄位選擇度、聚合條件、多表 Join 關係等最終輸出最優的索引優化建議。開發團隊稱目前 SQLAdvisor 在美團內部大量使用,較為成熟、穩定,且開源版本和內部使用版本保持完全一致,希望與業內有類似需求的團隊,一起打造一款優秀的 SQL 優化產品。