Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Mô hình dữ liệu để giao dịch cổ phiếu, quỹ và tiền điện tử

Giao dịch tiền điện tử, mua cổ phiếu và những thứ tương tự đang cực kỳ phổ biến ngày nay - nó được coi là lợi nhuận dễ dàng. Giá hiện đang tăng, nhưng chúng tôi không thể biết khi nào điều đó sẽ thay đổi. Mặt khác, chúng tôi biết nó sẽ xảy ra vào một thời điểm nào đó. Nhưng chúng tôi không ở đây để đưa ra các dự đoán tài chính. Thay vào đó, chúng ta sẽ nói về một mô hình dữ liệu có thể được sử dụng để hỗ trợ giao dịch tiền điện tử và các công cụ tài chính như cổ phiếu hoặc cổ phiếu quỹ.

Những điều bạn cần biết về tiền tệ giao dịch và cổ phiếu

Những cải tiến về công nghệ trong vài thập kỷ qua đã có tác động đáng kể đến hoạt động giao dịch. Hiện nay có rất nhiều nền tảng giao dịch trực tuyến bạn có thể sử dụng. Hầu hết các giao dịch ngày nay được thực hiện ảo - bạn có thể thấy cổ phiếu bằng giấy trong các viện bảo tàng, nhưng bạn không có khả năng nhìn thấy cổ phiếu bạn mua ở dạng giấy. Và bạn không cần phải đóng gói và đi đến Phố Wall hoặc bất kỳ sàn giao dịch chứng khoán nào khác để thực hiện giao dịch. Từ sự thoải mái của máy tính hoặc thiết bị di động của riêng bạn, bạn có thể mua hoặc bán các công cụ tài chính phái sinh (chẳng hạn như trái phiếu, cổ phiếu hoặc hàng hóa).

Hầu hết các giao dịch (bán các sản phẩm phái sinh tài chính) đều tuân theo các quy tắc tương tự. Có người bán và người mua. Nếu họ đồng ý về một mức giá, giao dịch sẽ xảy ra. Sau khi giao dịch, giá của phái sinh tài chính đó sẽ được tính toán lại và quá trình này sẽ tiếp tục với các nhà giao dịch mới. Cổ phiếu và các công cụ phái sinh khác hoạt động theo cách tương tự.

Tiền điện tử là gì? Có thể bạn đã nghe nói về Bitcoin và các loại tiền điện tử khác. Nhưng chúng là gì? Tiền điện tử giống như tiền ảo, nhưng chúng không bị ràng buộc với tiền tệ trong thế giới thực (như euro hoặc đô la). Thay vào đó, người dùng có thể giao dịch tiền điện tử với nhau như mã thông báo. Sau đó, họ có thể thương lượng một vụ mua bán để biến các token của họ thành tiền thật. Các giao dịch bán hàng này hoạt động chính xác như giao dịch cổ phiếu và cổ phiếu được mô tả ở trên.

Chủ đề này phức tạp và chúng tôi có thể có rất nhiều chi tiết trong mô hình của mình (ví dụ:hồ sơ tài liệu và giao dịch). Tôi sẽ giữ cho nó đơn giản; Tôi sẽ không triển khai bất kỳ loại giao dịch tự động nào hoặc bất kỳ công thức nào để tạo giá mới sau một sự kiện giao dịch.

Vì vậy, hãy cùng xem mô hình giao dịch đơn giản này.

Mô hình dữ liệu




Mô hình dữ liệu bao gồm ba lĩnh vực chủ đề:

  1. Currencies
  2. Items
  3. Traders

Chúng tôi sẽ trình bày từng lĩnh vực chủ đề theo thứ tự được liệt kê.

Tiền tệ

Currencies môn học là đơn giản. Nó chứa bốn bảng lưu trữ mọi loại tiền chúng tôi sử dụng và tỷ giá hối đoái của chúng. Đơn vị tiền tệ rất quan trọng vì:

  • Chúng tôi sẽ sử dụng một đơn vị tiền tệ, được gọi là đơn vị tiền tệ cơ sở , Để kinh doanh. Một nền tảng giao dịch chứng khoán trực tuyến có thể sẽ sử dụng đô la Mỹ (USD) làm tiền tệ cơ bản, bất kể khu vực thực tế của nhà giao dịch. Tất cả các giao dịch sẽ được chuyển đổi thành tiền tệ cơ sở.
  • Chúng tôi cũng có thể có ngoại tệ không cơ sở hoặc nội tệ cho tất cả các quốc gia có sẵn nền tảng giao dịch của chúng tôi. Điều này sẽ cho phép chúng tôi hiển thị giá bằng nội tệ nhưng vẫn thực hiện các giao dịch bằng tiền cơ sở.

Hai bảng còn lại liên quan đến tiền tệ và quốc gia.

Bảng quan trọng nhất trong chủ đề này là currency bàn. Đây là nơi chúng tôi sẽ lưu trữ tất cả các loại tiền mà chúng tôi đã từng sử dụng để giao dịch, bao gồm cả tiền điện tử. Việc một loại tiền tệ có được đưa vào bảng này hay không phụ thuộc vào việc loại tiền tệ đó có được sử dụng để thanh toán cho các mặt hàng được giao dịch hay không. Đối với mỗi đơn vị tiền tệ, chúng tôi sẽ lưu trữ:

  • code - Một mã được sử dụng để biểu thị đơn vị tiền tệ đó. Đối với tiền tệ quốc gia, đây sẽ là mã ISO 4217 (ví dụ:USD cho Đô la Mỹ) hoặc một số mã chính thức khác. Chúng tôi cũng có thể sử dụng ISO 4217 cho tiền điện tử; XBT là mã ISO của Bitcoin. Tuy nhiên, Bitcoin cũng sử dụng mã BTC một cách không chính thức.
  • name - Tên DUY NHẤT của đơn vị tiền tệ đó (ví dụ:Đô la Mỹ).
  • is_active - Nếu đơn vị tiền tệ hiện đang hoạt động trong hệ thống của chúng tôi.
  • is_base - Nếu đơn vị tiền tệ này là đơn vị tiền tệ cơ bản của hệ thống của chúng tôi. Thông thường, chúng tôi sẽ chỉ có một đơn vị tiền tệ cơ sở tại một thời điểm. Chúng tôi có thể có nhiều hơn một, chẳng hạn như sử dụng đồng euro cho các quốc gia EU và đô la Mỹ cho các khu vực khác. Trong trường hợp đó, chúng tôi có khả năng chỉ định đơn vị tiền tệ cơ sở cho từng quốc gia có thuộc tính này.

Bảng tiếp theo lưu trữ tỷ giá hiện tại và lịch sử giữa các cặp tiền tệ. Trong currency_rate bảng, chúng tôi sẽ lưu trữ currency_id chúng tôi muốn so sánh với base_currency_id cũng như rate khi cặp này được lưu trữ (ts ). Vì chúng tôi sẽ lưu trữ tỷ giá tại các thời điểm khác nhau, bảng này sẽ lưu trữ cả dữ liệu lịch sử và hiện tại.

Danh sách tất cả các quốc gia có liên quan được lưu trữ trong country từ điển. Bên cạnh khóa chính (id ), nó chứa một thuộc tính chứa name quốc gia DUY NHẤT .

Bảng cuối cùng trong chủ đề này là currency_used bàn. Trong hầu hết các trường hợp, một quốc gia sẽ luôn sử dụng cùng một loại tiền tệ. Tuy nhiên, những thay đổi có thể xảy ra, như khi nhiều nước EU thay thế đồng tiền quốc gia của họ bằng đồng euro. Để đề cập đến trường hợp như vậy, chúng tôi sẽ lưu trữ lịch sử của tất cả các đơn vị tiền tệ mà chúng tôi đã sử dụng. Đối với mỗi bản ghi trong bảng này, chúng tôi sẽ lưu trữ các tham chiếu đến country bảng (country_id ), currency bảng (currency_id ) và khi đơn vị tiền tệ này được sử dụng (date_fromdate_to ). Nếu date_to là NULL, thì đơn vị tiền tệ này hiện đang được sử dụng. Tất nhiên, mỗi quốc gia chỉ nên sử dụng một loại tiền tệ. Chúng tôi sẽ không triển khai quy trình kiểm tra đó trong mô hình; thay vào đó, chúng tôi sẽ thực hiện kiểm tra khi một bản ghi được thêm vào hoặc cập nhật trong bảng này.

Mặt hàng

Các bảng trong Items khu vực chủ đề xác định tất cả các mặt hàng có sẵn để giao dịch và tình trạng hiện tại của chúng. Nó cũng ghi lại tất cả những thay đổi đã xảy ra với những mục này theo thời gian.

item bảng liệt kê tất cả các mặt hàng mà thương nhân có thể mua hoặc bán (hoặc họ đã mua hoặc bán). Đây có thể là cổ phiếu, quỹ hoặc tiền điện tử. Bất kỳ giao dịch nào liên quan đến các công cụ tài chính này đều sử dụng gần như chính xác cùng một quy trình, vì vậy chúng ta có thể sử dụng cùng một cấu trúc cho tất cả chúng. Đối với mỗi mặt hàng, chúng tôi sẽ lưu trữ:

  • code - Mã văn bản DUY NHẤT cho mặt hàng đó, tương tự như những gì chúng tôi sử dụng để chia sẻ (ví dụ:NASDAQ sử dụng mã “AAPL” cho Apple Inc).
  • name - Tên đầy đủ của công ty (đối với cổ phiếu), quỹ hoặc tiền điện tử.
  • is_active - Cho dù mặt hàng này có sẵn để buôn bán hay không.
  • currency_id - Tham chiếu currency được sử dụng làm tiền tệ cơ bản cho mặt hàng này.
  • details - Tất cả các chi tiết bổ sung (chẳng hạn như số lượng cổ phiếu đã phát hành) ở định dạng văn bản.

price bảng theo dõi tất cả các thay đổi giá theo thời gian. Sau khi thay đổi xảy ra, chúng tôi sẽ lưu trữ thời gian (ts ) và buysell giá cho mặt hàng (item_id ) có liên quan. Chúng tôi cũng sẽ lưu trữ một tham chiếu đến currency bảng này cho chúng ta biết đơn vị tiền tệ được sử dụng để đặt giá trị của mặt hàng đó tại thời điểm đó. Lưu ý rằng đơn vị tiền tệ ưa thích cho bất kỳ mặt hàng nào có thể thay đổi.

Bảng cuối cùng trong lĩnh vực chủ đề này là report bàn. Ý tưởng là lưu trữ các báo cáo thường xuyên (tức là hàng ngày) cho từng mục. Báo cáo này sẽ dựa trên giao dịch trong thời gian đó và nó sẽ lưu giữ các chi tiết tài chính ở một nơi. Đây là dữ liệu thừa, nhưng nó có thể được chứng minh là rất hữu ích khi truy vấn giá lịch sử (điều này xảy ra thường xuyên, vì các nhà giao dịch cực kỳ quan tâm đến xu hướng). Đối với mỗi bản ghi trong bảng này, chúng tôi sẽ lưu trữ:

  • trading_date - Ngày của báo cáo này. Nếu chúng tôi cần biên dịch báo cáo thường xuyên hơn một lần mỗi ngày, chúng tôi sẽ phải thực hiện các thay đổi đối với mô hình - ví dụ:thêm dấu thời gian cho biết thời điểm bắt đầu và kết thúc giai đoạn giao dịch.
  • item_idcurrency_id - Tham khảo itemcurrency đã qua sử dụng.
  • first_price , last_price , min_price , max_priceavg_price - Giá đầu tiên, giá cuối cùng, giá tối đa, giá tối thiểu và trung bình của mặt hàng này trong khoảng thời gian này.
  • total_amount - Tổng số tiền đã thanh toán cho mặt hàng đó trong kỳ báo cáo.
  • quantity - Số lượng (số lượng) mặt hàng được giao dịch trong kỳ báo cáo này. Xin lưu ý rằng giá trung bình có thể được tính từ total_amountquantity , nhưng tôi muốn tách riêng “total_amount”. Điều này đơn giản hóa tình huống khi chúng tôi tạo báo cáo trong một khoảng thời gian dài hơn, chẳng hạn như hàng tuần. Trong trường hợp đó, chúng tôi có thể thêm tất cả total_amount và chia chúng cho tổng của tất cả quantity để nhận được giá trung bình hàng tuần.

Tất cả các thuộc tính trong bảng này (trừ khóa chính và khóa ngoại) có thể là NULL. Đây sẽ là trường hợp khi chúng tôi chèn một bản ghi cho một giai đoạn giao dịch mới - không có giao dịch nào cho đến nay. Vào đầu mỗi ngày, chúng tôi có thể mong đợi rằng chúng tôi sẽ chèn một bản ghi cho mỗi mục và cập nhật các giá trị này khi ngày đó diễn ra. Giá trị cập nhật cuối cùng cũng sẽ là báo cáo cuối cùng cho ngày đó.

Thương nhân

Traders lĩnh vực chủ đề là lĩnh vực cuối cùng chúng ta sẽ thảo luận, nhưng nó là lĩnh vực quan trọng nhất trong mô hình. Bốn bảng của nó (bỏ đi countryitem bảng mà chúng tôi đã đề cập) lưu trữ thông tin về thương nhân, hàng tồn kho và hành động của họ. Lưu ý rằng currency bảng được sử dụng ở đây chỉ là một bản sao. Nó được sử dụng để đơn giản hóa mô hình và tránh các mối quan hệ chồng chéo.

Bảng trung tâm là trader bàn. Đối với mỗi nhà kinh doanh, chúng tôi sẽ lưu trữ:

  • first_namelast_name - Họ và tên của thương nhân.
  • user_namepassword - Tên người dùng và mật khẩu (băm) do nhà giao dịch chọn. user_name thuộc tính chỉ có thể lưu trữ các giá trị DUY NHẤT.
  • email - Địa chỉ email của nhà giao dịch. Điều này sẽ được sử dụng để hoàn tất quá trình đăng ký và cho tất cả các liên hệ tiếp theo với nhà giao dịch. Nó cũng có thể chỉ chứa các giá trị DUY NHẤT.
  • confirmation_code - Mã được gửi đến người dùng để hoàn tất quá trình đăng ký.
  • time_registeredtime_confirmed - Dấu thời gian về thời điểm nhà giao dịch đăng ký và khi họ hoàn thành quy trình đăng ký.
  • country_id - country nơi nhà giao dịch sống.
  • preferred_currency_id - currency mà nhà giao dịch muốn giá hiển thị.

Danh sách tất cả các mặt hàng mà một thương nhân hiện đang sở hữu được lưu trữ trong current_inventory bàn. Đối với mỗi trader_id DUY NHẤT - item_id ghép nối, chúng tôi sẽ lưu trữ quantity thương nhân hiện đang sở hữu.

Hai bảng còn lại liên quan trực tiếp đến chào hàng và giao dịch. Chúng tôi sẽ giả định rằng mỗi nhà giao dịch có thể đưa ra đề nghị mua hoặc bán các mặt hàng ở một mức giá nhất định. Khi một đề nghị phù hợp xuất hiện, sự kiện giao dịch sẽ xảy ra. (Chúng tôi sẽ không đi vào chi tiết cụ thể cho các sàn giao dịch chứng khoán, nơi người môi giới đóng vai trò là người hòa giải.)

Chúng tôi sẽ lưu giữ tất cả các ưu đãi trong offer bàn. Bất kỳ thương nhân nào cũng có thể đặt một đề nghị mua hoặc bán các mặt hàng. Để thực hiện điều này, chúng tôi cần lưu trữ các chi tiết sau:

  • trader_iditem_id - Tham khảo trader người đã đặt phiếu mua hàng đó và item họ muốn mua hoặc bán.
  • quantity - Số lượng họ muốn mua hoặc bán.
  • buysell - Nếu ưu đãi này là để mua hoặc bán. Mỗi lần chỉ có thể đặt một thuộc tính.
  • price - Giá mua hoặc giá bán mong muốn. Không bắt buộc vì nhà giao dịch có thể muốn mua hoặc bán bất kể giá là bao nhiêu.
  • ts - Dấu thời gian khi bản ghi này được chèn.
  • is_active - Cho dù ưu đãi này vẫn còn hoạt động. Nó có thể trở nên không hoạt động a) nếu nhà giao dịch đặt nó thành không hoạt động hoặc b) nếu giao dịch đã diễn ra.

Bảng cuối cùng trong mô hình của chúng tôi chứa dữ liệu liên quan đến sự kiện giao dịch. Giao dịch diễn ra giữa hai người dùng sau khi cả hai đều đưa ra đề nghị. Giá được sử dụng có thể là giá đầu tiên được đưa ra hoặc giá hiện tại, tùy thuộc vào những gì chúng tôi muốn triển khai trong ứng dụng của mình. Đối với mỗi trade sự kiện, chúng tôi sẽ lưu trữ:

  • item_id - Đề cập đến item đã giao dịch.
  • seller_idbuyer_id - Cả hai đều tham chiếu đến trader bảng và biểu thị những người dùng tham gia vào giao dịch.
  • quantity - Số lượng mặt hàng đó đã được giao dịch trong giao dịch này.
  • unit_price - Đơn giá được sử dụng cho mặt hàng này trong giao dịch này.
  • description - Tất cả các chi tiết bổ sung, ở định dạng văn bản.
  • offer_id - ID của offer đã bắt đầu giao dịch này. Lưu ý:Ưu đãi đầu tiên bắt đầu giao dịch, vì vậy đó là ID mà chúng tôi sẽ lưu trữ tại đây.
  • ts - Dấu thời gian khi giao dịch này xảy ra.

Bạn nghĩ gì?

Chúng tôi vừa mới xem xét một mô hình dữ liệu để tạo điều kiện thuận lợi cho việc giao dịch trực tuyến tiền điện tử, cổ phiếu và các dẫn xuất tài chính khác. Đây chỉ là bộ xương trần của mô hình; có một loạt các chi tiết khác mà chúng tôi có thể thêm vào. Tôi đang nghĩ đến các tài liệu liên quan đến người giao dịch và cách lưu trữ thông tin thanh toán. Bạn sẽ thêm gì? Hoặc có thể loại bỏ? Vui lòng cho chúng tôi biết trong phần bình luận.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Điều chỉnh Hiệu suất Toàn bộ Kế hoạch Truy vấn

  2. Cài đặt WordPress bằng WP-CLI

  3. SCD loại 2

  4. Hệ thống quản lý cơ sở dữ liệu cỡ lớn:Thiết kế và Kiến trúc sư

  5. Sử dụng Docker trên Azure Container Service với Swarm Cluster