簡體   English   中英

這種 SQL 表設計對於數量有限的貨幣是否有意義?

[英]Does this SQL Table design make sense for a Currency with a finite amount?

這是我在 StackOverFlow 上的第一篇文章。 我需要一些意見,我的表格設計對於用戶可以擁有貨幣並且該貨幣數量有限的系統是否有意義——比如電子商務中的加密貨幣或折扣硬幣。

這是一個例子。 有一種貨幣說“硬幣”(CurrencyName),最大數量為“1,000”(TotalSupply)。 系統中的每個用戶都可以擁有一個,因此我創建了一個引用用戶 ID 和貨幣 ID 的庫存表,並添加了 Amounts Owned 列。 是否有意義?

用戶表

  • 用戶 ID INT PK
  • Email VARCHAR(255)
  • 密碼 VARCHAR(255)
  • 注冊日期 DATETIME

貨幣表

  • CurrencyId INT PK
  • 貨幣名稱 VARCHAR(255)
  • TotalSupply INT

庫存表

  • CurrencyId INT FK
  • UserId INT FK
  • AmountOwned INT

如果您的貨幣中沒有小數(“美分”或“便士”),這看起來是一個很好的表格設置。 無法控制所有用戶擁有的總數不會超過TotalSupply

一個很好的提示是使用類似total_owned而不是TotalOwned的名稱。

如果您決定要使用較小的單位(“ cent ”),請使用DECIMAL類型, FLOAT會帶來舍入問題。

假設加密貨幣保留到小數點后 18 位,這些似乎是 MySQL 中唯一的“好”數據類型選擇:

BIGINT UNSIGNED  -- scaled so that 1e18 in that is your 1.0
DECIMAL(19,18)   -- handles any amount up to (and slightly beyond 1.0)

可能不值得使用 Trigger 或 Check 來驗證值是否超過最大值,或者是否為負值。

第一個選項占用 8 個字節,加上縮放代碼。 第二個占用 9 個字節並直接處理諸如“0.00000123”之類的東西(不縮放)。 兩者都沒有舍入錯誤(假設您堅持 18 位數字。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM