20260707082030_AddDerivativeMarketSession.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. using Microsoft.EntityFrameworkCore.Migrations;
  2. #nullable disable
  3. namespace Infrastructure.Migrations.AppDb
  4. {
  5. /// <summary>
  6. /// 파생상품(선물/옵션) 일별매매에 매매 세션(Session, 1=정규/2=야간) 컬럼 추가 + UQ 를 (Kind, IsuCode, TradeDate, Session) 으로 확장.
  7. /// KRX 파생 응답은 동일 ISU_CD 로 정규·야간 행을 각각 제공하는데 기존 upsert 키에 세션이 없어 야간 행이 정규 종가·거래량을 덮어썼다.
  8. ///
  9. /// ⚠ 기존 운영 적재분은 세션 혼합 오염 가능(야간 값이 정규 위에 덮어써진 상태로 Session 기본값 1 이 매겨짐) —
  10. /// 배포 시 FuturesDailyTrade / OptionsDailyTrade 를 truncate 후 재백필 권장 (배치가 3년치를 자동으로 다시 메운다).
  11. /// </summary>
  12. public partial class AddDerivativeMarketSession : Migration
  13. {
  14. /// <inheritdoc />
  15. protected override void Up(MigrationBuilder migrationBuilder)
  16. {
  17. migrationBuilder.DropIndex(
  18. name: "IX_OptionsDailyTrade_OptionsKind_IsuCode_TradeDate",
  19. table: "OptionsDailyTrade");
  20. migrationBuilder.DropIndex(
  21. name: "IX_OptionsDailyTrade_OptionsKind_TradeDate_TradeValue",
  22. table: "OptionsDailyTrade");
  23. migrationBuilder.DropIndex(
  24. name: "IX_FuturesDailyTrade_FuturesKind_IsuCode_TradeDate",
  25. table: "FuturesDailyTrade");
  26. migrationBuilder.DropIndex(
  27. name: "IX_FuturesDailyTrade_FuturesKind_TradeDate_TradeValue",
  28. table: "FuturesDailyTrade");
  29. migrationBuilder.AddColumn<byte>(
  30. name: "Session",
  31. table: "OptionsDailyTrade",
  32. type: "tinyint",
  33. nullable: false,
  34. defaultValue: (byte)1,
  35. comment: "매매 세션 (1=정규, 2=야간)");
  36. migrationBuilder.AddColumn<byte>(
  37. name: "Session",
  38. table: "FuturesDailyTrade",
  39. type: "tinyint",
  40. nullable: false,
  41. defaultValue: (byte)1,
  42. comment: "매매 세션 (1=정규, 2=야간)");
  43. migrationBuilder.CreateIndex(
  44. name: "IX_OptionsDailyTrade_OptionsKind_IsuCode_TradeDate_Session",
  45. table: "OptionsDailyTrade",
  46. columns: new[] { "OptionsKind", "IsuCode", "TradeDate", "Session" },
  47. unique: true);
  48. migrationBuilder.CreateIndex(
  49. name: "IX_OptionsDailyTrade_OptionsKind_TradeDate_Session_TradeValue",
  50. table: "OptionsDailyTrade",
  51. columns: new[] { "OptionsKind", "TradeDate", "Session", "TradeValue" },
  52. descending: new[] { false, false, false, true });
  53. migrationBuilder.CreateIndex(
  54. name: "IX_FuturesDailyTrade_FuturesKind_IsuCode_TradeDate_Session",
  55. table: "FuturesDailyTrade",
  56. columns: new[] { "FuturesKind", "IsuCode", "TradeDate", "Session" },
  57. unique: true);
  58. migrationBuilder.CreateIndex(
  59. name: "IX_FuturesDailyTrade_FuturesKind_TradeDate_Session_TradeValue",
  60. table: "FuturesDailyTrade",
  61. columns: new[] { "FuturesKind", "TradeDate", "Session", "TradeValue" },
  62. descending: new[] { false, false, false, true });
  63. }
  64. /// <inheritdoc />
  65. protected override void Down(MigrationBuilder migrationBuilder)
  66. {
  67. migrationBuilder.DropIndex(
  68. name: "IX_OptionsDailyTrade_OptionsKind_IsuCode_TradeDate_Session",
  69. table: "OptionsDailyTrade");
  70. migrationBuilder.DropIndex(
  71. name: "IX_OptionsDailyTrade_OptionsKind_TradeDate_Session_TradeValue",
  72. table: "OptionsDailyTrade");
  73. migrationBuilder.DropIndex(
  74. name: "IX_FuturesDailyTrade_FuturesKind_IsuCode_TradeDate_Session",
  75. table: "FuturesDailyTrade");
  76. migrationBuilder.DropIndex(
  77. name: "IX_FuturesDailyTrade_FuturesKind_TradeDate_Session_TradeValue",
  78. table: "FuturesDailyTrade");
  79. migrationBuilder.DropColumn(
  80. name: "Session",
  81. table: "OptionsDailyTrade");
  82. migrationBuilder.DropColumn(
  83. name: "Session",
  84. table: "FuturesDailyTrade");
  85. migrationBuilder.CreateIndex(
  86. name: "IX_OptionsDailyTrade_OptionsKind_IsuCode_TradeDate",
  87. table: "OptionsDailyTrade",
  88. columns: new[] { "OptionsKind", "IsuCode", "TradeDate" },
  89. unique: true);
  90. migrationBuilder.CreateIndex(
  91. name: "IX_OptionsDailyTrade_OptionsKind_TradeDate_TradeValue",
  92. table: "OptionsDailyTrade",
  93. columns: new[] { "OptionsKind", "TradeDate", "TradeValue" },
  94. descending: new[] { false, false, true });
  95. migrationBuilder.CreateIndex(
  96. name: "IX_FuturesDailyTrade_FuturesKind_IsuCode_TradeDate",
  97. table: "FuturesDailyTrade",
  98. columns: new[] { "FuturesKind", "IsuCode", "TradeDate" },
  99. unique: true);
  100. migrationBuilder.CreateIndex(
  101. name: "IX_FuturesDailyTrade_FuturesKind_TradeDate_TradeValue",
  102. table: "FuturesDailyTrade",
  103. columns: new[] { "FuturesKind", "TradeDate", "TradeValue" },
  104. descending: new[] { false, false, true });
  105. }
  106. }
  107. }