iT邦幫忙

0

SQLite有辦法一個欄位存多個值嗎?

想請問各位大神,小弟現在有幾筆資料要存到資料表裡,想知道能不能在寫入資料表的時候,一次直接把A01和A03直接存到欄位2裡,這樣子資料表裡就只有3筆資料。或是說只能一筆一筆的寫入進去?還是說有其他的方法嗎?
https://ithelp.ithome.com.tw/upload/images/20190524/20115779wUUJsz24Be.jpg

slime iT邦大師 1 級 ‧ 2019-05-24 19:09:33 檢舉
什麼樣的應用要"一欄填三個值"? 或者需要的是"一個值但有分行?".

建議先參考 第三正規化 3NF

2 個回答

0
暐翰
iT邦大師 1 級 ‧ 2019-05-25 20:33:39
最佳解答

目前看起來你的表格邏輯:
PIN碼跟廠牌關係是1對1,PIN碼跟編碼是1對多

現在都放在同一個表格暫稱『廠商編碼』
表格設計SQL大概,如下圖跟腳本
會發現PIN碼跟廠牌會有大量重複資料出現

線上測試連結

CREATE TABLE 廠商編碼
	([PIN碼] int, [編碼] varchar(3), [廠牌] nvarchar(5))
;
	
INSERT INTO 廠商編碼
	([PIN碼], [編碼], [廠牌])
VALUES
	(123, 'A01', N'蘋果'),
	(123, 'A03', N'蘋果'),
	(456, 'B11', N'花碩'),
	(456, 'B12', N'花碩'),
	(789, 'C77', N'三興'),
	(789, 'C78', N'三興'),
	(789, 'C79', N'三興'),
	(789, 'C80', N'三興')
;

這時候可以將多方『編碼』欄位拆出去獨立一個表格,查詢時使用PIN碼做關聯,如下圖跟腳本,就可以解決之前重複資料問題

CREATE TABLE 廠商 ([PIN碼] int, [廠牌] nvarchar(5));
	
INSERT INTO 廠商 ([PIN碼], [廠牌])
VALUES (123, N'蘋果'),(456, N'花碩'),(789, N'三興');

CREATE TABLE 編碼
	([PIN碼] int, [編碼] varchar(3))
;
	
INSERT INTO 編碼
	([PIN碼], [編碼])
VALUES (123, 'A01'),(123, 'A03'),(456, 'B11'),(456, 'B12'),(789, 'C77'),
       (789, 'C78'),(789, 'C79'),(789, 'C80');


線上測試連結

0
小魚
iT邦高手 1 級 ‧ 2019-05-24 18:10:56

我的話通常會設計下面的方式,
呈現方式在資料撈出來的時候再處理,
如果要放同一格也可以考慮用逗號區隔,
不過一般來說我是不會這樣做.

我要發表回答

立即登入回答